圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/
在上篇([15]R是什麼?準備開發R的環境 - RStudio介紹)了解了R的歷史和準備好了接下來的開發環境之後,就可以開始用R來做分析了。
一般來說,在學新的語言都會先看看所謂的Hello World,了解整個語言的Syntax和感覺。
不過R不是一般型的程式語言,是給統計學家用的語言。因此,個人覺得如果只是看Hello World好像看不出來R特別的地方,不過如果直接學語法又太無聊。
因此,這邊透過安裝和使用quantmod這個套件,並且用它來簡單分析股票作為R的入門介紹。
這篇的範例程式碼在github:alantsai/blog-data-science-series 裡面的 src/chapter-16-r-quantmod-intro
quantmod是一個R的套件,全稱是Quantitative Financial Modelling and Trading Framework for R ,它是一個套件用來做股票相關分析。
接下來將會用quantmod來分析apple的股票。
接下來會分幾個階段進行:
第一個指令是:library("quantmod")
可以直接放在左上角的script裡面,或者左下角的console執行。
在之後只要看到R的script裡面有出現:library,或者require,表示要載入套件到目前的session。
舉例來說,如果看到library("quantmod")表示需要套件quantmod,這個時候如果沒有這個套件就記得要安裝。
安裝方式有兩種:
透過指令 - install.packages
透過gui
嚴格來說只有一種方式,就是指令,因為gui其實也是呼叫指令。
使用GUI的話,有幾種做法:
選擇右下角的 install
在package名稱輸入 quantmod - 這邊會注意到會有auto complete的效果
最後按下安裝
用gui安裝package
實際上,這個動作同等於在console呼叫install.packages("quantmod"),這邊有件事情要注意一下,安裝的時候會出現紅色的字,那個不是錯誤,只是在這個theme的情形下的訊息。
安裝的畫面
取得google股票資訊和分析得出內容
在這個部分的指令如下:
# 取得apple的股票,並且看看前6筆資料
getSymbols("GOOG")
head(GOOG)
這邊用了兩個指令:
getSymbols
這個是quantmod提供的方法,GOOG是google的股票代號,這個資料是從yahoo股市來。
head
這個是r base(核心)的方法,表示看前6筆的資料。
這個會很常看到,當拿到Data不知道是什麼的時候,就會呼叫head看一下內容。
執行結果
head出來的結果看到有6個欄位:
GOOG.Open - 就是開盤價
GOOG.High - 最高價
GOOG.Low - 最低價
GOOG.Close - 收盤價
GOOG.Volime - 成交量
GOOG.Adjusted - 還原權值
每一列是一個日期,換句話說就是每一天。
還記得之前提到Data Science的3個圈圈嗎?其中一塊就是Domain Knowledge。如果不懂股票,那麼剛剛那些數值其實沒有任何意義。 接下來也沒有辦法做分析。
看股票的就知道,會看一個所謂的走勢圖,quantmod讓畫這個走勢圖非常的簡單,只需要呼叫:chartSeries(GOOG)
畫出走勢圖,從20070103到20180102
可以把這張圖放大(放大鏡 Zoom)或者另存(圖片Export)
這個的區間可能非常長,可能看不太清楚,因此可以限制變成只分析進3個月的資料: chartSeries(GOOG["2017-11-03::2018-01-03",])
還記得整個資料像是一個table的樣子,那麼等於我們在限制row(列)的部分,因為每一列是日期。
只顯示3個月
這個是國外的軟體,所以綠色代表漲,紅色代表跌。又是另外一個Domain Knowledge。
有了資料和走勢,接下來是做一些分析。
在股票來說,有個所謂的黃金交叉新和死亡交叉線。
基本上有個概念叫做移動平均數(Moving Average MA),例如如果計算3天均數就是把三天的價加總算出平均。那這個會隨著天數移動,因此叫做移動平均數。
如果一個長期的MA(例如60日季線)屬於下降然後短期的MA(例如20日月線)屬於上升並且交叉,就稱之為黃金交叉,原因是整個趨勢屬於上漲。
死亡交叉是一樣概念,只是反過來。短期的MA屬於下降,然後長期屬於上升,兩者交叉的時候就是死亡交叉。
還是要強調,Domain Knowledge的重要,小弟我不懂股票,了解這個概念也是花了一點時間。
有了這個概念之後,來執行以下語法:
# 計算 20日和60日均線
ma20<-runMean(GOOG[,4],n=20)
ma60<-runMean(GOOG[,4],n=60)
head(ma20, 25)
# 畫上線
chartSeries(GOOG["2017-01-03::2018-01-03",], theme = "white")
addTA(ma20,on=1,col="blue")
addTA(ma60,on=1,col="red")
這邊用了一個新的方法,但是大部分都是quantmod的方法,因此不介紹了,不過有三個地方做一下說明:
runMean(GOOG[,4], n=20)
重點在GOOG[,4]。
這邊有兩個部分:
還記得MA的計算是用收盤價,所以我們要用所有的資料,因此逗點前面是空白,剛好和剛剛過濾日期是顛倒
這邊用的是第四個欄位,也就是收盤價的欄位。R裡面的index是從1開始,而不是像一般從0開始
指令:head(ma20,25)
這邊指的是看前25筆,由於是20日均線,所以前20筆是NA因為不夠計算。
指令:chartSeries(GOOG["2017-01-03::2018-01-03",], theme = "white")
之前只顯示前3個月沒辦法很好的畫,所以把整個時間拉長到1年,並且改成白色比較方便畫線。
畫上均線
希望透過透過這個範例可以看出R的一些特點:不管在過濾列的資料和欄的資料都可以用簡單array的感覺來做到,並且在繪圖上面和呈現非常方便。
不過要注意的是,這邊很多指令都是和quantmod這個套件有關,因此在一般其他的Exploratory analysis比較沒辦法使用到。
因此在接下來將會在下一篇介紹R的特性,和其他語言差別在哪別和一些特色。
quantmod官網
官網資料使用範例
第一次使用R語言做回測:六分鐘,就上手!
這篇基本參考了這個部落格裡面內容做介紹,部落格還有延伸一些預測會賺多少的介紹。
http://www.bituzi.com/2014/12/Rbacktest6mins.html
工商服務
今年的團隊機制不知不覺就集合了10位隊(坑)友 - 大家幫忙多多關注別不小心我們就gg了 XD
** 一群技術愛好者與一名物理治療師的故事 提醒著我們 千萬不要放棄治療 **
沉浸於.Net世界的後端工程師,樂於分享,現任台中Study4成員之一。除了程式以外,就愛看小說。
歡迎有任何問題或者建議都可以告訴我,可以再以下找到我:
部落格:Alan Tsai的學習筆記
我的Linkedin
我的粉絲頁
我的github
我的Slideshare
我的Twitter